package Leetcode.数组字符串;

/**
 * @ClassName 反转字符串中的元音字母
 * @since: 2023/8/4 21:13
 * @auth: kirito
 * @description:
 * 给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。
 *
 * 元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现不止一次。
 * 示例 1：
 *
 * 输入：s = "hello"
 * 输出："holle"
 * 示例 2：
 *
 * 输入：s = "leetcode"
 * 输出："leotcede"
 *
 * 可以双指针左右各自找到元音字母后交换元素，然后继续下一个，直到指针相遇
 **/
public class 反转字符串中的元音字母 {
    public static String reverseVowels(String s) {
        int len = s.length();
        char[] chars = s.toCharArray();
        int i = 0, j = len - 1;
        while (i < j) {
            while (i < len && !isVowel(chars[i])) {
                i++;
            }
            while (j > 0 && !isVowel(chars[j])) {
                j--;
            }
            if (i < j) {
                swap(chars, i, j);
                i++;
                j--;
            }
        }
        return new String(chars);
    }
    public static boolean isVowel(char ch) {
        return "aeiouAEIOU".indexOf(ch) >= 0;
    }
    public static void swap(char[] arr, int i, int j) {
        char temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }


    public static void main(String[] args) {
        String s = "leetcode"; //leotcede
        System.out.println(reverseVowels(s));
    }
}
